package ar.com.sne.model.service.geo;

import java.util.List;

import org.springframework.stereotype.Service;

import foundation.common.util.BusinessException;
import foundation.common.util.CommonGeneralUtil;
import foundation.common.util.FinderFilter;
import foundation.common.util.PagedFinder;
import ar.com.sne.model.bo.geo.GeoCiudad;
import ar.com.sne.model.dao.factory.GeoDAOFactory;
import ar.com.sne.model.dao.factory.PerDAOFactory;

@Service("geoCiudadService")
public class GeoCiudadServiceImpl implements GeoCiudadService{
	
	private GeoDAOFactory geoCiudadDAO;
	
   	
	public void delete(GeoCiudad geoCiudad) {
		validacionDelete(geoCiudad);
		geoCiudadDAO.getGeoCiudadDAO().delete(geoCiudad);
	}


	public List<GeoCiudad> findAll() {
		return geoCiudadDAO.getGeoCiudadDAO().findAll();
	}		

	
	public GeoCiudad findById(Long id) {
		return (GeoCiudad) geoCiudadDAO.getGeoCiudadDAO().getById(id);
	}


	public void save(GeoCiudad geoCiudad) {
		if(geoCiudad.getId() == null) {
			validacionCreate(geoCiudad);
		} else {
			validacionUpdate(geoCiudad);
		}
		geoCiudadDAO.getGeoCiudadDAO().save(geoCiudad);
	}
	
	
	public List<GeoCiudad> find(FinderFilter filter) {
	
		return geoCiudadDAO.getGeoCiudadDAO().find(filter);
	}
	

	public PagedFinder findPaging(PagedFinder pf) {
		return geoCiudadDAO.getGeoCiudadDAO().findPaging(pf);
	}

	
	/**
	 * Validaciones de negocio pre-delete Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param geoCiudad
	 *            la instancia a validar antes de ser borrada
	 */
	private void validacionDelete(GeoCiudad geoCiudad) {
		BusinessException be = new BusinessException();
		
		CommonGeneralUtil.throwBussinesException(be);
	}
	
	/**
	 * Validaciones de negocio pre-update Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param geoCiudad
	 *            la instancia a validar antes de ser modificada
	 */
	private void validacionUpdate(GeoCiudad geoCiudad) {
		BusinessException be = new BusinessException();
		
		//valida que el codigo no sea duplicado
		FinderFilter filter = new FinderFilter();
//		filter.addFilter("codigo", geoCiudad.getCodigo());
//		filter.addFilter("idGeoCiudad", geoCiudad.getId());
//		List<GeoCiudad> geoCiudadList = geoCiudadDAO.find(filter);
//		if(geoCiudadList.size()>0) //exite un tipo de movimiento de cta cte de poliza con el codigo pasado como parametro
//			be.addExceptionKey("GeoCiudad.validacionCreate.codigoDuplicado");
		
		CommonGeneralUtil.throwBussinesException(be);		
		
	}

	/**
	 * Validaciones de negocio pre-create Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param geoCiudad
	 *            la instancia a validar antes de ser creada
	 */
	private void validacionCreate(GeoCiudad geoCiudad) {
		BusinessException be = new BusinessException();
		
		CommonGeneralUtil.throwBussinesException(be);
	}
	
	
}
